/**
 * Description:
 * Class Name:ArrayTest2
 * Date:2022/4/30 17:23
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第18章_类加载机制与反射._18_4_使用反射生成并操作对象._18_4_4_操作数组;

import java.lang.reflect.Array;

public class ArrayTest2 {
    public static void main(String[] args) {
        /*
        创建一个3维数组，其实3维数组也是一维数组
        只不过是数组元素是二维的一维数组
        因此可以认为array是长度为3的一维数组
         */
        Object arr = Array.newInstance(String.class, 3, 4, 10);
        // 获取arr数组中index为2的元素，该元素应该是二维数组
        Object arrObj = Array.get(arr, 2);
        // 使用Array为二维数组的数组元素赋值，二维数组的数组元素是一维数组
        // 所以传入Array的set()方法的第3个参数是一维数组
        Array.set(arrObj, 2, new String[]{"Test Value 1", "Test Value 2"});

        // 获取arrObj数组中index为3的元素，该元素应该是一维数组
        Object anArr = Array.get(arrObj, 3);
        Array.set(anArr, 8, "Single Value in 2-3-8");

        // 将arr强制类型转换为3维数组
        var cast = (String[][][]) arr;
        // 获取cast三维数组中指定元素的值
        System.out.println(cast[2][3][8]);
        System.out.println(cast[2][2][0]);
        System.out.println(cast[2][2][1]);
    }
}
//Single Value in 2-3-8
//Test Value 1
//Test Value 2
